/**
 * 游戏主流程端到端测试
 * 测试完整的游戏体验流程
 */
describe('游戏主流程测试', () => {
  beforeEach(() => {
    cy.visit('/')
  })

  it('应该能够完成完整的游戏流程', () => {
    // 1. 验证主菜单加载
    cy.get('[data-cy="main-menu"]').should('be.visible')
    cy.get('[data-cy="game-title"]').should('contain', '跑酷游戏')
    
    // 2. 开始新游戏
    cy.get('[data-cy="start-game-btn"]').should('be.visible').click()
    
    // 3. 角色选择
    cy.get('[data-cy="character-select"]').should('be.visible')
    cy.selectCharacter('default')
    
    // 4. 游戏开始
    cy.waitForGameLoad()
    cy.checkGameStatus('playing')
    
    // 5. 验证游戏界面元素
    cy.get('[data-cy="score-display"]').should('be.visible')
    cy.get('[data-cy="health-bar"]').should('be.visible')
    cy.get('[data-cy="game-canvas"]').should('be.visible')
    
    // 6. 执行游戏操作
    cy.gameAction('jump')
    cy.wait(500)
    cy.gameAction('slide')
    cy.wait(500)
    cy.gameAction('left')
    cy.wait(500)
    cy.gameAction('right')
    
    // 7. 验证分数增加
    cy.get('[data-cy="score-display"]').should('not.contain', '0')
    
    // 8. 暂停游戏
    cy.get('body').type('{esc}')
    cy.checkGameStatus('paused')
    cy.get('[data-cy="pause-menu"]').should('be.visible')
    
    // 9. 恢复游戏
    cy.get('[data-cy="resume-btn"]').click()
    cy.checkGameStatus('playing')
    
    // 10. 游戏结束（模拟碰撞）
    // 这里可以通过特定的操作或等待来触发游戏结束
    cy.wait(2000) // 等待一段时间让游戏运行
  })

  it('应该能够处理游戏结束流程', () => {
    // 开始游戏
    cy.startNewGame()
    cy.selectCharacter('default')
    
    // 等待游戏结束（可以通过特定操作触发）
    // 这里我们模拟游戏结束的情况
    cy.window().then((win) => {
      // 通过窗口对象触发游戏结束
      win.dispatchEvent(new CustomEvent('game-over'))
    })
    
    // 验证游戏结束界面
    cy.get('[data-cy="game-over-screen"]', { timeout: 5000 }).should('be.visible')
    cy.get('[data-cy="final-score"]').should('be.visible')
    cy.get('[data-cy="restart-btn"]').should('be.visible')
    cy.get('[data-cy="menu-btn"]').should('be.visible')
    
    // 重新开始游戏
    cy.get('[data-cy="restart-btn"]').click()
    cy.waitForGameLoad()
    cy.checkGameStatus('playing')
  })

  it('应该能够返回主菜单', () => {
    // 开始游戏
    cy.startNewGame()
    cy.selectCharacter('default')
    
    // 暂停游戏
    cy.get('body').type('{esc}')
    cy.checkGameStatus('paused')
    
    // 返回主菜单
    cy.get('[data-cy="menu-btn"]').click()
    cy.get('[data-cy="main-menu"]').should('be.visible')
    cy.checkGameStatus('menu')
  })
})